﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net;
using System.IO;
using System.Web.Script.Serialization;
using System.Collections;
using System.ComponentModel;
using System.Text;

namespace DSDCiZharp.Models.Itinerarios
{
    public class ItinerariosModel
    {
        /*ATRIBUTOS PRINCIPALES*/
        public string Id_Itinerario { get; set; }
    
        public IEnumerable Origenes { get; set; }
        [DisplayName("Origen")]
        public string CiudadOrigenSeleccionada { get; set; }

        public IEnumerable Destinos { get; set; }
        [DisplayName("Destino")]
        public string CiudadDestinoSeleccionada { get; set; }

        [DisplayName("Fecha Salida")]
        public string FechaSalida { get; set; }
        [DisplayName("Hora Salida")]
        public string HoraSalida { get; set; }

        [DisplayName("Fecha Llegada")]
        public string FechaLlegada { get; set; }
        [DisplayName("Hora Llegada")]
        public string HoraLlegada { get; set; }

        [DisplayName("Núm. Asientos")]
        public string cantidadAsientos { get; set; }

        /*LISTA TODOS*/
        public List<Itinerario> lstItinerario = null;

        public void ListarOrigenes()
        {
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://localhost:49692/Itinerarios.svc/Origenes");
            req.Method = "GET";
            HttpWebResponse res = (HttpWebResponse)req.GetResponse();
            StreamReader reader = new StreamReader(res.GetResponseStream());
            string OrigenesJson = reader.ReadToEnd();
            JavaScriptSerializer js = new JavaScriptSerializer();
            List<Ciudad> ciudadesOrigen = js.Deserialize<List<Ciudad>>(OrigenesJson);
            
            /*Ciudad Nula*/
            Ciudad ciudad = new Ciudad();
            ciudad.id_ciudad = 0;
            ciudad.descripcion = "Seleccionar ciudad Origen";

            ciudadesOrigen.Insert(0, ciudad);

            this.Origenes = ciudadesOrigen;
        }

        public void ListarDestinos()
        {
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://localhost:49692/Itinerarios.svc/Destinos");
            req.Method = "GET";
            HttpWebResponse res = (HttpWebResponse)req.GetResponse();
            StreamReader reader = new StreamReader(res.GetResponseStream());
            string DestinosJson = reader.ReadToEnd();
            JavaScriptSerializer js = new JavaScriptSerializer();
            List<Ciudad> ciudadesDestino = js.Deserialize<List<Ciudad>>(DestinosJson);

            /*Ciudad Nula*/
            Ciudad ciudad = new Ciudad();
            ciudad.id_ciudad = 0;
            ciudad.descripcion = "Seleccionar ciudad Destino";

            ciudadesDestino.Insert(0, ciudad);

            this.Destinos = ciudadesDestino;            
        }

        public string nuevoItinerario(Itinerario itinerario)
        {
            JavaScriptSerializer js = new JavaScriptSerializer();
            string postdata = js.Serialize(itinerario);

            byte[] data = Encoding.UTF8.GetBytes(postdata);
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://localhost:49692/Itinerarios.svc/Itinerarios");
            req.Method = "POST";
            req.ContentLength = data.Length;
            req.ContentType = "application/json";

            var reqStream = req.GetRequestStream();
            reqStream.Write(data, 0, data.Length);
            reqStream.Close();

            var res = (HttpWebResponse)req.GetResponse();
            StreamReader reader = new StreamReader(res.GetResponseStream());
            string ItinerarioJson = reader.ReadToEnd();

            return js.Deserialize<string>(ItinerarioJson);
        }

        public string actualizarItinerario(Itinerario itinerario)
        {
            JavaScriptSerializer js = new JavaScriptSerializer();
            string postdata = js.Serialize(itinerario);

            byte[] data = Encoding.UTF8.GetBytes(postdata);
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://localhost:49692/Itinerarios.svc/Itinerarios");
            req.Method = "PUT";
            req.ContentLength = data.Length;
            req.ContentType = "application/json";

            var reqStream = req.GetRequestStream();
            reqStream.Write(data, 0, data.Length);
            reqStream.Close();

            var res = (HttpWebResponse)req.GetResponse();
            StreamReader reader = new StreamReader(res.GetResponseStream());
            string ItinerarioJson = reader.ReadToEnd();

            return js.Deserialize<string>(ItinerarioJson);
        }

        public void obtenerItinerario(string Id_Itinerario)
        {
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://localhost:49692/Itinerarios.svc/Itinerarios/" + Id_Itinerario);
            req.Method = "GET";
            HttpWebResponse res = (HttpWebResponse)req.GetResponse();
            StreamReader reader = new StreamReader(res.GetResponseStream());

            string itinerarioJson = reader.ReadToEnd();
            JavaScriptSerializer js = new JavaScriptSerializer();
            Itinerario itinerarioObtenido = js.Deserialize<Itinerario>(itinerarioJson);

            this.Id_Itinerario = itinerarioObtenido.Id_Itinerario.ToString();
            this.CiudadOrigenSeleccionada = itinerarioObtenido.Id_Origen.ToString();
            this.CiudadDestinoSeleccionada = itinerarioObtenido.Id_Destino.ToString();
            this.FechaSalida = itinerarioObtenido.Salida.Split(' ')[0];
            this.HoraSalida = itinerarioObtenido.Salida.Split(' ')[1];
            this.FechaLlegada = itinerarioObtenido.Llegada.Split(' ')[0];
            this.HoraLlegada = itinerarioObtenido.Llegada.Split(' ')[1];
            this.cantidadAsientos = itinerarioObtenido.Total_Asiento.ToString();
        }

        public void eliminarItinerario(string Id_Itinerario)
        {
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://localhost:49692/Itinerarios.svc/Itinerarios/" + Id_Itinerario);
            req.Method = "DELETE";
            HttpWebResponse res = (HttpWebResponse)req.GetResponse();
        }

        public void ListarItinerarios()
        {
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://localhost:49692/Itinerarios.svc/Itinerarios");
            req.Method = "GET";
            HttpWebResponse res = (HttpWebResponse)req.GetResponse();
            StreamReader reader = new StreamReader(res.GetResponseStream());
            string itinerarioJson = reader.ReadToEnd();
            JavaScriptSerializer js = new JavaScriptSerializer();
            this.lstItinerario = js.Deserialize<List<Itinerario>>(itinerarioJson);
        }
    }
}